Ray-tracing may be used to render images by tracing a path of light in a virtual environment and simulating the effects of the light's encounters with virtual objects. Various applications of ray-tracing technology may simulate a variety of optical effects—such as shadows, reflections and refractions, scattering phenomenon, and dispersion phenomenon (such as chromatic aberration). With respect to rendering reflections using ray-tracing, conventional approaches use stochastic ray-tracing in which ray-traced camera and reflected rays are cast in a virtual environment to sample lighting conditions for a pixel. The lighting conditions may be combined and applied to the pixel in an image. To conserve computing resources, the rays may be sparsely sampled, resulting in a noisy render. The noisy render may then be filtered to reduce noise and produce a final render that approximates a render of a fully-sampled scene.
In order for the final render to accurately portray lighting conditions in the virtual environment after filtering, conventional approaches require a large number of ray-traced samples (e.g., hundreds of samples or more) for each pixel. Due to the large number of samples, the computational resources used for rendering the virtual environment may impose too great of a delay for real-time rendering applications, such as gaming. In one such approach, each surface is treated as a diffuse surface to compute an isotropic filter kernel without accounting for the directional nature of the surface. However, this may be a prominent feature of some surfaces, such as glossy surfaces. Thus, the size, shape, orientation and weights of the filter kernel may not accurately reflect the spatial characteristics of the virtual environment nor the reflective properties of the surface, which may cause over-blurring of the image in addition to an unrealistic blur pattern.